class Util {

  /**
   * 从指定对象数组中找到，指定属性值的显示值
   * @param array 对象数组
   * @param val  查询值
   * @param keyColName 查询值对应属性名
   * @param LabelColName 显示值属性名
   * @returns {string|*}
   */
  returnLabel(array, val, keyColName, LabelColName) {
    if (val) {
      for (let i = 0; i < array.length; i++) {
        if (array[i][keyColName] == val) {
          return array[i][LabelColName]
        }
      }
    } else {
      return ""
    }
  }

  /**
   * EL-CASCADER 如果是多选，返回的数据格式是数组套数组，处理后只返回叶子节点的字符串，供后台查询使用
   * @param {Object} array
   * @param {Object} isChild 是否为儿，调用时传入null
   * @param {Object} isSingle 是否为单选，多选不需要传入此参数
   */
  returnOnlyLeaf(array, isChild, isSingle) {
    let result = ''
    for (let i = 0; i < array.length; i++) {
      if (array[i] instanceof Array) {
        result += this.returnOnlyLeaf(array[i], true)
      } else {
        if (isChild || isSingle) {//最后一个元素就是叶子，哪怕只有一个元素也是一个数组
          if (i === array.length - 1) {
            result += ',' + array[i]
          }
        } else {
          result += ',' + array[i]
        }
      }
    }
    if (isChild) {
      return result
    } else {
      if (result) {
        return result.substr(1)
      }
      return ''
    }
  }

  /**
   * 拷贝对象
   * @param obj
   * @returns {{}}
   */
  deepCopyObj(obj) {
    const copyObj = {}
    for (const objKey in obj) {
      if (obj.hasOwnProperty(objKey)) {
        copyObj[objKey] = obj[objKey]
      }
    }
    return copyObj
  }

  /**
   * 深度拷贝对象的所有非空字段
   * @param obj
   * @returns {{}}
   */
  deepCopyObjNotBlankProp(obj) {
    const copyObj = {}
    for (const objKey in obj) {
      if (obj.hasOwnProperty(objKey) && (obj[objKey] || obj[objKey] === 0) && (!(obj[objKey] instanceof String) || obj[objKey].trim())) {
        copyObj[objKey] = obj[objKey]
      }
    }
    return copyObj
  }

  /**
   * 将对象的所有属性转为空，用于条件查询对象的初始化
   * @param obj
   */
  setNull(obj) {
    for (const objKey in obj) {
      if (obj.hasOwnProperty(objKey) && (obj[objKey] || obj[objKey] === 0) && (!(obj[objKey] instanceof String) || obj[objKey].trim())) {
        obj[objKey] = null
      }
    }
  }


  /**
   * 把文本转换为小数数值，并补充小数位
   * @param v 要转换为数值的文本
   * @param num  保留小数位数
   * @param isZeroFill 是否补充0
   * @returns {string|boolean}
   */
  toDecimal(v, num, isZeroFill) {
    let f = parseFloat(v);
    if (isNaN(f)) {
      return false;
    }
    f = Math.round(v * (Math.pow(10, num))) / Math.pow(10, num);
    let s = f.toString();
    if (isZeroFill !== false) {
      let rs = s.indexOf('.');
      if (num > 0 && rs < 0) {
        rs = s.length;
        s += '.';
      }
      while (s.length <= rs + num) {
        s += '0';
      }
    }
    return s;
  }

  /**
   * 在数字前补0，用于员工编号的转换或月份前补0
   * @param num 传入的数字
   * @param n  字符长度
   * @returns {string}
   * @constructor
   */
  prefixInteger(num, n) {
    return (Array(n).join('0') + num).slice(-n);
  }
}

export default new Util()
